// 环境配置文件

// 环境类型
export type Environment = 'development' | 'production' | 'test'

// 环境配置接口
interface EnvConfig {
  API_BASE_URL: string
  API_TIMEOUT: number
  ENABLE_MOCK: boolean
  LOG_LEVEL: 'debug' | 'info' | 'warn' | 'error'
}

// 获取当前环境
export const getCurrentEnv = (): Environment => {
  return (import.meta.env.MODE as Environment) || 'development'
}

// 从环境变量获取配置，如果没有则使用默认值
const getConfigFromEnv = (): EnvConfig => {
  return {
    API_BASE_URL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8081',
    API_TIMEOUT: Number(import.meta.env.VITE_API_TIMEOUT) || 20000,
    ENABLE_MOCK: import.meta.env.VITE_ENABLE_MOCK === 'true',
    LOG_LEVEL: (import.meta.env.VITE_LOG_LEVEL as EnvConfig['LOG_LEVEL']) || 'debug'
  }
}

// 不同环境的默认配置（作为备用）
const envConfigs: Record<Environment, EnvConfig> = {
  development: {
    API_BASE_URL: 'http://localhost:8081',
    API_TIMEOUT: 20000,
    ENABLE_MOCK: false,
    LOG_LEVEL: 'debug'
  },
  production: {
    API_BASE_URL: 'https://api.ganstlala.com',
    API_TIMEOUT: 5000,
    ENABLE_MOCK: false,
    LOG_LEVEL: 'error'
  },
  test: {
    API_BASE_URL: 'http://localhost:8081',
    API_TIMEOUT: 5000,
    ENABLE_MOCK: true,
    LOG_LEVEL: 'warn'
  }
}

// 获取当前环境配置
export const getEnvConfig = (): EnvConfig => {
  // 优先使用环境变量配置
  const envConfig = getConfigFromEnv()
  
  // 如果环境变量中没有API_BASE_URL，则使用默认配置
  if (!import.meta.env.VITE_API_BASE_URL) {
    const currentEnv = getCurrentEnv()
    return envConfigs[currentEnv]
  }
  
  return envConfig
}

// 导出当前环境配置
export const ENV_CONFIG = getEnvConfig()

// 是否为开发环境
export const isDevelopment = getCurrentEnv() === 'development'

// 是否为生产环境
export const isProduction = getCurrentEnv() === 'production'

// 是否为测试环境
export const isTest = getCurrentEnv() === 'test'

// 日志工具
export const logger = {
  debug: (...args: any[]) => {
    if (ENV_CONFIG.LOG_LEVEL === 'debug') {
      console.log('[DEBUG]', ...args)
    }
  },
  info: (...args: any[]) => {
    if (['debug', 'info'].includes(ENV_CONFIG.LOG_LEVEL)) {
      console.info('[INFO]', ...args)
    }
  },
  warn: (...args: any[]) => {
    if (['debug', 'info', 'warn'].includes(ENV_CONFIG.LOG_LEVEL)) {
      console.warn('[WARN]', ...args)
    }
  },
  error: (...args: any[]) => {
    console.error('[ERROR]', ...args)
  }
}